package utils

import (
	"fmt"
	uuid "github.com/satori/go.uuid"
	"net"
)

func GetUUId() string {
	u1 := uuid.NewV4()
	fmt.Println(u1.String())
	return u1.String()
}

func ParserUUID(u string) (*uuid.UUID, error) {
	// 解析
	//u2, err := uuid.FromString("f5394eef-e576-4709-9e4b-a7c231bd34a4")
	u2, err := uuid.FromString(u)
	if err != nil {
		fmt.Printf("Something gone wrong: %s", err)
		return nil, err
	}
	return &u2, nil
}

func GetCanUsePort() (int, error) {
	// 解析地址
	// ResolveTCPAddr 能将 addr 作为TCP 地址解析并返回，net 可选的值必须是 tcp、tcp4、tcp6其中一个
	addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
	if err != nil {
		return 0, nil
	}
	// 利用 ListenTCP 方法的如下特性
	// 如果 addr 的端口字段为0，函数将选择一个当前可用的端口
	// net 可选的值必须是 tcp、tcp4、tcp6其中一个
	// 如果 addr 的端口字段为0，函数将选择一个当前可用的端口
	listen, err := net.ListenTCP("tcp", addr)
	if err != nil {
		return 0, nil
	}
	// 关闭资源
	defer listen.Close()
	// 为了拿到具体的端口值，我们转换成 *net.TCPAddr类型获取其Port
	return listen.Addr().(*net.TCPAddr).Port, nil
}
